package com.kaifamiao.inner;

/**
 * 成员类(member class):
 *    嵌套类(nest class): 俗称 静态内部类
 *    内部类(inner class): 俗称 实例内部类
 * 非成员类:
 *    局部类(local class): 俗称 局部内部类
 *    匿名类(anonymous class): 俗称 匿名内部类
 */
public class Computer {

    // 嵌套类(nest class): 被 static 修饰的成员类(member class)
    // 俗称 静态内部类 (编译后的字节码文件名称是 Computer$MainBoard.class )
    public static class MainBoard {
        @Override
        public String toString() {
            return "MainBoard";
        }
    }

    // 内部类(inner class): 没有被 static 修饰的成员类(member class)
    // 俗称 实例内部类 (编译后的字节码文件名称是 Computer$Keyboard.class )
    public class Keyboard {
        @Override
        public String toString() {
            return "Keyboard";
        }
    }

    public void display(){
        // 局部类(local class): 不是成员的内部类都可以视为局部类
        // 俗称 局部内部类 (编译后的字节码文件名称是 Computer$1Monitor.class )
        class Monitor {
            @Override
            public String toString() {
                return "Monitor【display】";
            }
        }
        // 创建局部类的实例
        Monitor m = new Monitor();
        System.out.println( m );
    }

    public void show(){
        // 局部类(local class): 不是成员的内部类都可以视为局部类
        // 俗称 局部内部类 (编译后的字节码文件名称是 Computer$2Monitor.class )
        class Monitor {
            @Override
            public String toString() {
                return "Monitor【show】";
            }
        }
        // 创建局部类的实例
        Monitor m = new Monitor();
        System.out.println( m );
    }

    public static void main(String[] args) {

        Computer c = new Computer();
        c.display();
        c.show();
    }

}
